
<?php

require_once APPPATH . 'core/BaseDAO.php';

use models\user;

class userDAO extends BaseDAO {

    function __construct() {
        parent::__construct();
    }

    public function getUserByUsernameAndPassword($usename, $password) {

        try {
            $CI = & get_instance();
            $CI->load->database();
            $query = $CI->db->query('SELECT "mapcache_administrator".user
                                WHERE username = ' . $usename . 'and password =' . $password
            );
            $rows = $query;
            $CI->db->close();
            return !is_empty($rows);
        } catch (Exception $e) {

            return FALSE;
        }
    }

    public function getAllSociosBy($tipoDocumento = '', $numeroDocumento = '', $apellido = '') {

        try {

            $comienzo = "SELECT s FROM models\M_socio s JOIN s.tipo_documento t";

            $where = "";

            if (!($tipoDocumento == '' && $numeroDocumento == '' && $apellido == '')) {

                $where .= ' WHERE ';

                $where .= "s.apellido LIKE " . (($apellido == '') ? "'%'" : " '%" . $apellido . "%' ");

                $where .= ($tipoDocumento == '' || $tipoDocumento == 0) ? "" : " AND t.id = " . $tipoDocumento;

                $where .= ($numeroDocumento == '') ? "" : " AND s.numero_documento = " . $numeroDocumento;
            }

            $consulta = $comienzo . $where . '';

            $query = $this->em->createQuery($consulta . ' ORDER BY s.apellido, s.nombre, s.numero_documento ASC');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
        } catch (Exception $e) {

            return FALSE;
        }
    }

    public function getSocioBy($valor, $campo, $tipo) {

        try {

            $comparador = $tipo === 'string' ? 'like' : '=';

            $qb = $this->em->createQueryBuilder();
            $qb->add('select', 's')
                    ->add('from', 'models\M_socio s')
                    ->add('where', 's.' . $campo . ' ' . $comparador . ' ?1')
                    ->setParameter(1, $valor);

            $persona = $qb->getQuery()->getResult();

            return empty($persona) ? FALSE : $persona[0];
        } catch (Exception $e) {

            return FALSE;
        }
    }

    public function getSociosCobrables() {

        try {

            $query = $this->em->createQuery('SELECT s FROM models\M_socio s JOIN s.estado e
                                                WHERE e.id IN (1,2)');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getSociosCobrablesEnZona($idZona) {

        try {

            $query = $this->em->createQuery('SELECT s FROM models\M_socio s JOIN s.zona z JOIN s.estado e
                                                WHERE z.id = ' . $idZona . '
                                                    AND e.id IN (0,1,2)');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCountsCategoriasSocio() {
        try {

            $query = $this->em->createQuery('SELECT c.id as id, c.nombre as nombre, COUNT(c.id) as cantidad
                                                FROM models\M_socio s JOIN s.categoria c
                                                group by c.id, c.nombre
                                                order by c.id, c.nombre');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function actualizarEstadoSocio($idSocio, $idEstado, $dia, $mes, $anio) {

        $CI = & get_instance();
        $CI->load->database();
        $query = $CI->db->query('UPDATE "BD_Operativa".socio
                                SET estado_id = ' . $idEstado . ',
                                    vencimiento_estado = \'' . $anio . '-' . $mes . '-' . $dia . '\'
                                WHERE id = ' . $idSocio);
        $rows = $query;
        $CI->db->close();
    }

    public function insertarSocio($nombre, $apellido, $tipoDocumento, $numeroDocumento, $domicilio, $domicilioCobro, $fechaNacimiento, $zona, $categoria) {

        $CI = & get_instance();
        $CI->load->database();
        $fecha_nacimiento = date('Y-m-d', strtotime($fechaNacimiento));



        $query = $CI->db->query('INSERT INTO "BD_Operativa".socio 
                                    (apellido, nombre, tipo_documento_id, numero_documento, domicilio,
                                    domicilio_cobro, fecha_nacimiento, zona_id, vitalicio, categoria_id,
                                    estado_id)
                                VALUES (\'' . $apellido . '\', \'' . $nombre . '\', ' . $tipoDocumento . ', ' . $numeroDocumento . ', 
                                    \'' . $domicilio . '\', \'' . $domicilioCobro . '\', \'' . $fecha_nacimiento . '\', ' . $zona . ',
                                        \'FALSE\', ' . $categoria . ', 0)');

        $CI->db->close();

        return $query;
    }

    public function habilitarSocio($estado_id, $fechaVencimiento, $socio_id) {

        $CI = & get_instance();
        $CI->load->database();
        $query = $CI->db->query('UPDATE "BD_Operativa".socio
                                SET estado_id = ' . $estado_id . ',
                                    vencimiento_estado = \'' . $fechaVencimiento . '\'
                                WHERE id = ' . $socio_id);
        $rows = $query;
        $CI->db->close();
    }

}